Hello Python
本课程涵盖了您需要的关键Python技能,以便您可以开始使用Python进行数据科学。本课程非常适合那些有一定编码经验的人,他们想要将Python添加到他们的曲目中。(如果你是第一次编程,鼓励你看看我们的编程入门课程,这是为想要开始使用Python的完全初学者设计的。)
我们将从Python语法、变量赋值和算术运算符的简要概述开始。
Hellp Python!
Python是以英国喜剧剧团Monty Python命名的,所以我们的第一个Python节目将向他们关于Spam的小品致敬。
为了好玩,试着通读下面的代码,并预测它在运行时会做什么。(如果你不知道,那也没关系!)
然后点击“输出”按钮来查看程序的结果。
spam_amount = 0
print(spam_amount)
# Ordering Spam, egg, Spam, Spam, bacon and Spam (4 more servings of Spam)
spam_amount = spam_amount + 4
if spam_amount > 0:
print("But I don't want ANY spam!")
viking_song = "Spam " * spam_amount
print(viking_song)
0
But I don't want ANY spam!
Spam Spam Spam Spam
这里有很多东西要打开!这个愚蠢的程序演示了Python代码的许多重要方面以及它是如何工作的。让我们从上到下检查代码。
spam_amount = 0
变量赋值:这里我们创建了一个名为spam_amount的变量,并使用 = 将其赋值为0,这被称为赋值操作符。
注意:如果你用某些其他语言(如Java或c++)编程,你可能会注意到Python在这里不需要我们做一些事情:
我们不需要在赋值之前“声明”spam_amount 我们不需要告诉Python spam_amount将指向什么类型的值。实际上,我们甚至可以继续重新分配spam_amount,以引用不同类型的东西,如字符串或布尔值。
print(spam_amount)
0
函数调用:print是一个Python函数,它在屏幕上显示传递给它的值。调用函数时,可以在函数名后面加上圆括号,并将函数的输入(或参数)放在圆括号中。
# Ordering Spam, egg, Spam, Spam, bacon and Spam (4 more servings of Spam)
spam_amount = spam_amount + 4
上面的第一行是注释。在Python中,注释以 # 符号开始。
接下来我们看一个重赋的例子。对现有变量的值重新赋值看起来与创建变量一样——它仍然使用=赋值操作符。
在本例中,我们分配给spam_amount的值涉及对其前一个值的一些简单算术。当遇到这一行时,Python计算=(0 + 4 = 4)右侧的表达式,然后将该值赋给左侧的变量。
if spam_amount > 0:
print("But I don't want ANY spam!")
viking_song = "Spam Spam Spam"
print(viking_song)
But I don't want ANY spam!
Spam Spam Spam
我们稍后再讨论“条件语句”,但是,即使您以前从未编写过代码,您也可能猜到它的作用。Python因其可读性和简单性而备受推崇。
注意我们是如何指出哪个代码属于if的。“但是我不想要任何垃圾邮件!”只有在spam_amount为正值时才会被打印出来。但是后面的代码(比如print(viking_song))无论如何都应该执行。我们(和Python)是怎么知道的?
if行末尾的冒号(:)表示开始一个新的代码块。缩进的后续行是该代码块的一部分。
注意:如果你以前写过代码,你可能知道其他一些语言使用{花括号}来标记代码块的开始和结束。Python对有意义空格的使用可能会让习惯于其他语言的程序员感到惊讶,但在实践中,它可以比不强制代码块缩进的语言产生更一致和可读的代码。
后面处理viking_song的行没有缩进额外的4个空格,所以它们不是if代码块的一部分。稍后在定义函数和使用循环时,我们将看到更多缩进代码块的示例。
这段代码也是我们在Python中第一次看到字符串:
“但我不想要任何垃圾邮件!” 字符串可以用双引号或单引号来标记。(但是因为这个特定的字符串包含一个单引号字符,我们可能会通过尝试用单引号包围它来混淆Python,除非我们非常小心。)
viking_song = "Spam " * spam_amount
print(viking_song)
Spam Spam Spam Spam
*运算符可用于将两个数字相乘(3 * 3的计算结果为9),但我们也可以将字符串乘以数字,以获得重复多次的版本。Python提供了许多类似这样的节省时间的小技巧,其中像*和+这样的操作符根据它们应用于什么类型的东西有不同的含义。(技术术语是操作符重载。)
Numbers and arithmetic in Python
我们已经看到了上面一个包含数字的变量的例子:
spam_amount = 0
“Number”是这类东西的一个很好的非正式名称,但如果我们想更专业,我们可以问Python它会如何描述spam_amount是什么类型的东西:
type(spam_amount)
int
int是**integer(整数)**的缩写。我们在Python中经常遇到另一种类型的数字:
type(19.95)
float
**float(浮点数)**是一个带小数点的数字——在表示权重或比例等东西时非常有用。
Type()是我们看到的第二个内置函数(在print()之后),也是一个值得记住的内置函数。能够询问Python“这是什么类型的东西?”是非常有用的。
对数字进行运算是一件很自然的事情。我们已经学过加法运算符+,乘法运算符*。Python还为我们介绍了计算器上的其他基本按钮:
Operator | Name | Description |
---|---|---|
a + b | Addition | Sum of a and b |
a - b | Subtraction | Difference of a and b |
a * b | Multiplication | Product of a and b |
a / b | True division | Quotient of a and b |
a // b | Floor division | Quotient of a and b , removing fractional parts |
a % b | Modulus | Integer remainder after division of a by b |
a ** b | Exponentiation | a raised to the power of b |
-a | Negation | The negative of a |
一个有趣的观察是,你的计算器可能只有一个除法按钮,而Python可以做两种。“真除法”基本上就是你的计算器所做的:
print(5 / 2)
print(6 / 2)
2.5
3.0
它总是给我们一个浮点数。
//运算符为我们提供一个四舍五入到下一个整数的结果。
print(5 // 2)
print(6 // 2)
2
3
你能想到这有什么用吗?您将很快在编码挑战中看到一个示例。
Order of operations
我们在小学学过的算术有关于运算求值顺序的约定。有些人通过一些助记符来记住这些,比如PEMDAS ——Parentheses, Exponents, Multiplication/Division, Addition/Subtraction.(优先级-> 括号、指数、乘法/除法、加法/减法)
Python也遵循类似的规则来决定先执行哪个计算。它们大多是非常直观的。
8 - 3 + 2
7
-3 + 4 * 2
5
有时操作的默认顺序不是我们想要的:
hat_height_cm = 25
my_height_cm = 190
# How tall am I, in meters, when wearing my hat?
total_height_meters = hat_height_cm + my_height_cm / 100
print("Height in meters =", total_height_meters, "?")
Height in meters = 26.9 ?
括号在这里很有用。你可以添加它们来强制Python按照你想要的顺序计算子表达式。
total_height_meters = (hat_height_cm + my_height_cm) / 100
print("Height in meters =", total_height_meters)
Height in meters = 2.15
Builtin functions for working with numbers
min 和 max 分别返回其参数的最小值和最大值…
print(min(1, 2, 3))
print(max(1, 2, 3))
1
3
abs返回参数的绝对值:
print(abs(32))
print(abs(-32))
32
32
除了作为Python的两种主要数值类型的名称外,int和float也可以作为函数调用,将它们的参数转换为相应的类型:
print(float(10))
print(int(3.33))
# They can even be called on strings!
print(int('807') + 1)
10.0
3
808
Exercise
Question 0
这是一个愚蠢的问题,旨在介绍我们在所有Kaggle课程中使用的实践练习格式。
*你最喜欢的颜色是什么?*
要完成这个问题,请在下面的单元格中创建一个名为color的变量,并设置适当的值。函数调用q0.check()(我们已经在下面的单元格中提供了它)将检查您的答案。
# create a variable called color with an appropriate value on the line below
# (Remember, strings in Python must be enclosed in 'single' or "double" quotes)
color = 'blue'
# Check your answer
q0.check()
Question 1
pi = 3.14159 # approximate
diameter = 3
# Create a variable called 'radius' equal to half the diameter
radius = diameter/2
# Create a variable called 'area', using the formula for the area of a circle: pi times the radius squared
area = pi * radius * radius
# Check your answer
q1.check()
Question 2
在下面的单元格中添加代码以交换变量a和b(以便a引用先前由b引用的对象,反之亦然)。
########### Setup code - don't touch this part ######################
# If you're curious, these are examples of lists. We'll talk about
# them in depth a few lessons from now. For now, just know that they're
# yet another type of Python object, like int or float.
a = [1, 2, 3]
b = [3, 2, 1]
q2.store_original_ids()
######################################################################
# Your code goes here. Swap the values to which a and b refer.
# If you get stuck, you can always uncomment one or both of the lines in
# the next cell for a hint, or to peek at the solution.
c = a
a = b
b = c
######################################################################
# Check your answer
q2.check()
Question 3A
在下面的表达式中添加括号,使其计算结果为1。
(5 - 3) // 2
Question 3B
在下面的表达式中添加括号,使其计算结果为0。
8 - (3 * 2) - (1 + 1)
Question 4
Alice、Bob 和Carol同意把他们的万圣节糖果放在一起平分。为了他们的友谊,剩下的糖果都会被砸碎(给我吃不好吗???)。例如,如果他们一起带回家91个糖果,他们将每人拿走30个,然后打碎1个。
在下面写一个算术表达式来计算他们必须粉碎多少糖果。
# Variables representing the number of candies collected by alice, bob, and carol
alice_candies = 121
bob_candies = 77
carol_candies = 109
# Your code goes here! Replace the right-hand side of this assignment with an expression
# involving alice_candies, bob_candies, and carol_candies
to_smash = (alice_candies + bob_candies + carol_candies)%3
# Check your answer
q4.check()